Sqlite 数据库损坏的恢复

您所在的位置:网站首页 image integrity check failed Sqlite 数据库损坏的恢复

Sqlite 数据库损坏的恢复

2024-07-07 01:58| 来源: 网络整理| 查看: 265

损坏原因: http://www.sqlite.org/lockingv3.html#how_to_corrupt

检查数据库损坏情况

首先sqlite3 database_name进入数据库 然后运行命令 PRAGMA integrity_check; 如果数据库文件损坏就会报损坏的错误,如何数据库文件是完好的就会显示OK。

sqlite 命令 https://www.runoob.com/sqlite/sqlite-select.html SQlite database disk image is malformed

数据表的损坏,一般原因: 数据表在读写的时候,设备突然断电、关机、软件闪退等情况下会造成数据库或表的损坏。

Sqlite3 导出损坏包中的数据

客户的一张表中的数据丢失了,无法查看,一共35条附件数据

1、安装 Sqlite3

安装步骤,菜鸟教程

安装成功

2、使用Sqlite 命令导出数据为sql文件 dump 命令 导出为 sql 文件

使用如下命令:

sqlite3 old.db .dump > newsfeed.sql

cmd 打开命令行,定位到数据库文件夹,使用上述命令,dump 成sql

用文本编辑器打开newsfeed.sql

把文件拉倒最后面,我们可以看到 ROLLBACK; -- due to errors

把ROLLBACK;改成COMMIT;

用newsfeed.sql生成新的数据包

使用如下命令生成新的数据库包

sqlite3 new.db < newsfeed.sql

我们可以看到数据找回了31条

2、 加密结果库的数据找回

客户反馈软件导出成果时出错,经过对数据的排查发现是 WYHCFJ 这张表中的 数据有损坏。

用上面的相同的方法,

1、DB Browser 打开加密的数据库

2、导出数据库中的数据为sql文件

3、利用sqlit3 命令将 sql 文件重新生成db文件

4、打开重新生成的db ,发现附件表中有420条附件

最大ID是420,证明原库中是从421开始出错的

5、打开原始db,我们从422开始查询

可以看到从422开始,数据没有错误,那么应该就只有421这条数据是错误的,我们验证下

6、在原始db中查询421的数据

我们发现这条数据是错误的

7、怎么跳过错误的数据,而将421之后的数据插入到新的库中?

这里我联结了新旧两个数据库,然后使用INSERT INTO SELECT 语句

利用DBMS联结新旧数据库

利用SQL语句插入数据

insert into WYHCFJ select * from hcjg00.WYHCFJ where F_ID > 421 插入数据成功

将数据放回软件,验证成功!问题解决,排除掉了421的异常数据

3、不可挽回的损坏

在数据恢复的时候,有时候会发现导出的 sql 文件的时候,会出现这样的情况 file is not a database 这种情况我就木鸡了.....

PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; /**** ERROR: (26) file is not a database *****/ ROLLBACK; -- due to errors


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3